java.nio.ByteBuffer aを(新しく作成された)CharBufferbまたはchar [] bに変換する最速の方法は何ですか。 これを行うことにより、a [i] == b [i]であることが重要です。これは、a [i]とa [i +1]が一緒に値b [j]を構成するのではなく、getChar(i)が行うことを意味しますが、値は「拡散」する必要があります。 バイトa [] = {1,2,3、125,126,127、-128、-127、-126} //各バイト(符号付き) char b [] = {1,2,3、125,126,127、128、129、130} //各char(符号なし) byte:-128はchar:128と同じ(下位8)ビットであることに注意してください。したがって、ビットが同じであるため、「最良の」解釈は上記のとおりであると思います。 その後、その逆の変換も必要です。char[]またはjava.nio.CharBufferをjava.nio.ByteBufferに戻す最も効率的な方法です。
2021-01-06 08:18:35
したがって、必要なのは、エンコーディングISO-8859-1を使用して変換することです。 私は効率について何も主張しませんが、少なくとも書くのはかなり短いです: CharBufferの結果= Charset.forName( "ISO-8859-1")。decode(byteBuffer); 他の方向は次のようになります。 ByteBufferの結果= Charset.forName( "ISO-8859-1")。encode(charBuffer); これを他のソリューションと比較して測定してください。 (公平を期すために、Charset.forNameの部分は含めないでください。また、バッファーごとではなく、一度だけ実行する必要があります。) Java 7以降には、事前にインスタンス化されたCharsetインスタンスを持つStandardCharsetsクラスもあるため、次を使用できます。 CharBufferの結果= StandardCharsets.ISO_8859_1.decode(byteBuffer); そして ByteBufferの結果= StandardCharsets.ISO_8859_1.encode(charBuffer); 代わりに。 (これらの行は以前の行と同じですが、検索が簡単で、名前を誤って入力するリスクがなく、不可能な例外をキャッチする必要がありません。) | 私は@Ishtarに同意し、新しい構造への変換をまったく避け、必要な場合にのみ変換することを提案します。 ただし、ヒープByteBufferがある場合は、それを実行できます。 ByteBuffer bb =..。 byte [] array = bb.array(); char [] chars = new char [bb.remaining()]; for(int i = 0; i